package com.gljx.web.controller.back.power;


import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;


import org.apache.log4j.Logger;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.apache.shiro.authz.annotation.RequiresRoles;
import org.apache.shiro.session.Session;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

import com.gljx.constant.Constant;
import com.gljx.util.CommonUtil;
import com.gljx.web.Entity.User;
import com.gljx.web.service.UserService;

@Controller
@RequestMapping("/user")
public class UserAction {

	private  Logger logger = Logger.getLogger(getClass());
	
	@Autowired
	private UserService userService;
	
	
	/**
	 * 用户管理页
	* @param password
	* @param newPassword
	* @return
	* @author LiXiang  @date 2017年10月30日 下午2:00:44
	 */
	@RequestMapping("/look.action")
    public ModelAndView look(String password,
    				   String newPassword
    				   ) {
		ModelAndView mav=new ModelAndView();
		mav.setViewName("/backManage/power/user_list");
		Session session = SecurityUtils.getSubject().getSession();
		mav.getModel().put("companyId", session.getAttribute(Constant.CompanyId_session));
		mav.getModel().put("companyName", session.getAttribute(Constant.CompanyName_session));
		mav.getModel().put("companyLFunmber", session.getAttribute(Constant.CompanyLFnumber_session));
		return mav;
	}
	/**
	 * 修改
	* @param user
	* @return
	* @author LiXiang  @date 2017年10月30日 下午2:00:38
	 */
	@RequiresPermissions("/user/update.action")
	@RequestMapping("/update.action")
	@ResponseBody
    public Map <String,Object > update(User user) {
		Map <String,Object > dataMap = new HashMap<String, Object>();
		if(CommonUtil.isSpecialChar_strict(user.getUserName(),user.getName())
				||CommonUtil.isSpecialChar_simple(user.getRemark())){
			logger.error("##自定义异常##:"+SecurityUtils.getSubject().getPrincipal()+">>>非法输入");
			dataMap.put("error", "非法字符");
			return dataMap;
		}
		dataMap.put("success",userService.updateUser(user));
		return dataMap;
	}
	/**
	 * 获取用户完整信息
	* @param id
	* @return
	* @author LiXiang  @date 2017年10月30日 下午1:50:46
	 */
	@RequestMapping("/userdata.action")
	@ResponseBody
    public Map <String,Object > userdata(String id) {
		Map <String,Object > dataMap = new HashMap<String, Object>();
		dataMap.put("user",userService.selectUserData(Integer.valueOf(id)));
		return dataMap;
	}
	
	/**
	 * 添加
	* @param user
	* @return
	* @author LiXiang  @date 2017年10月30日 下午1:50:38
	 */
	@RequiresPermissions("/user/add.action")
	@RequestMapping("/add.action")
	@ResponseBody
    public Map <String,Object > add(User user) {
		Map <String,Object > dataMap = new HashMap<String, Object>();
		if(CommonUtil.isSpecialChar_strict(user.getUserName(),user.getName())
				||CommonUtil.isSpecialChar_simple(user.getRemark())){
			logger.error("##自定义异常##:"+SecurityUtils.getSubject().getPrincipal()+">>>非法输入");
			dataMap.put("error", "非法字符");
			return dataMap;
		}
		try {
			dataMap.put("success",userService.insert(user));
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		}
		return dataMap;
	}
	/**
	 * 用户列表
	* @param rows
	* @param page
	* @return
	* @author LiXiang  @date 2017年10月25日 下午1:47:27
	 * @throws IOException 
	 */
	@RequestMapping("/list.action")
	@ResponseBody
    public Map <String,Object > list(String rows,		//单页条目
    		 						 String page,		//页码从一开始
    		 						 String name,		//姓名
    		 						 String dept,		//部门
	    		     				 String company,	//公司
	    		     				 String fisAdmin,	//是否管理
	    		     				 String fisPower,	//是否授权
	    		     				 String fisDelete,	//是否可用
	    		     				 String fisProjecjt) throws IOException {//是否当前系统用户
		if(CommonUtil.isSpecialChar_strict(name,company,dept)){
			Map <String,Object > dataMap = new HashMap<String, Object>();
			logger.error("##自定义异常##:"+SecurityUtils.getSubject().getPrincipal()+">>>非法输入");
			dataMap.put("rows",new ArrayList<>());
			dataMap.put("total",0);
			return dataMap;
		}
		//转换 属性为数据库可接收属性
		fisAdmin = CommonUtil.isConstant(fisAdmin,"0","1");
		fisPower = CommonUtil.isConstant(fisPower,"0","1");
		fisProjecjt = CommonUtil.isConstant(fisProjecjt,"0","1");
		fisDelete = CommonUtil.isConstant(fisDelete,"0","1");
		return userService.selectBIUser(rows, page, name,dept, company, fisAdmin, fisPower,fisDelete, fisProjecjt);
	}
	
	
	/**
	 * 批量授权
	* @param ids
	* @return
	* @author LiXiang  @date 2017年10月27日 下午5:07:37
	 */
	@RequiresPermissions("/user/power.action")
	@RequestMapping("/power.action")
	@ResponseBody
    public Map <String,Object > power(String ids){
		Map <String,Object > dataMap = new HashMap<String, Object>();
			dataMap.put("success", userService.powerUser(ids));
		return dataMap;
	}
    		
	/**
	 * 批量设置项目关联
	* @param ids
	* @return
	* @author LiXiang  @date 2017年10月27日 下午5:10:34
	 */
	@RequiresPermissions("/user/setProject.action")
	@RequestMapping("/setProject.action")
	@ResponseBody
    public Map <String,Object > setProject(String ids,String flag){
		Map <String,Object > dataMap = new HashMap<String, Object>();
		if(CommonUtil.isSpecialChar_simple(ids,flag)){
			logger.error("##自定义异常##:"+SecurityUtils.getSubject().getPrincipal()+">>>非法输入");
			dataMap.put("error","未知异常");
		}else{
			dataMap.put("success",userService.setProject(ids,flag));
		}
		return dataMap;
	}
	/**
	 * 修改密码
	* @return
	* @author LiXiang  @date 2017年12月6日 下午4:30:32
	 */
	@RequestMapping("/toSetPassword.action")
    public String tosetPassword() {
		return "setPassword";
	}
	/**
	 * 用户修改自己的密码
	* @param password
	* @param newPassword
	* @return
	* @author LiXiang  @date 2017年10月23日 下午5:10:37
	 */
    @RequestMapping("/setpassword.action")
    @ResponseBody
    public Map <String,Object > login(String password,String newPassword) {
    	Map <String,Object > dataMap = new HashMap<String, Object>();
    	try {
    		dataMap.put("rmssData", userService.setUserPwd(password, newPassword));
		} catch (Exception e) {
			logger.error("##用户修改密码错误##"+e);
			dataMap.put("rmssData","修改密码失败");
		}
    	return dataMap;
    }
}
